package controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.tree.ExpandVetoException;

import vista.RegistrarIngredientes;

import modelo.Ingrediente;
import modelo.IngredienteDAO;


public class ControladorRegistrarIngredientes implements ActionListener{

	private RegistrarIngredientes registrarIngredientes;
	
	
	private List<Ingrediente> ingredientes;
	
	public ControladorRegistrarIngredientes() {
		super();
		this.registrarIngredientes = new RegistrarIngredientes();
		this.registrarIngredientes.addListener(this);
		this.registrarIngredientes.setLocationRelativeTo(null);
		this.registrarIngredientes.setUnidadMedicion(Ingrediente.UNIDAD_MEDICION);
		this.registrarIngredientes.setVisible(true);
		limpiarCampos();
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		
		if (e.getActionCommand().equals("Buscar")){
			rellenarCapos();
		}
		else if (e.getActionCommand().equals("Incluir")){
			incluir();
			new RegistrarIngredientes();
		}
		else if (e.getActionCommand().equals("Modificar")){
			modificar();
			new RegistrarIngredientes();
		}
		else if (e.getActionCommand().equals("Eliminar")){
			eliminar();
			new RegistrarIngredientes();
		}
		else if (e.getActionCommand().equals("Limpiar")){
			limpiarCampos();
			new RegistrarIngredientes();
		}
		else if (e.getActionCommand().equals("Ver")){
			new ControladorReporteIngredientes();
		}
		else if (e.getActionCommand().equals("Salir")){
			this.registrarIngredientes.dispose();
		}
	}
	
	public void rellenarCapos( ){
		IngredienteDAO ingredienteDAO = new IngredienteDAO();
		Ingrediente ingrediente=ingredienteDAO.buscarIngredientePorNombre(registrarIngredientes.getTxtNombre());
		if (ingrediente!=null){
			registrarIngredientes.mostrarMensaje("Ingrediente encontrado");
	
		registrarIngredientes.setNroCodigo(String.valueOf(ingrediente.getCodI()));
		registrarIngredientes.setTxtNombre(ingrediente.getNombre());
		registrarIngredientes.setTxtExistencia(String.valueOf(ingrediente.getExistencia()));
		registrarIngredientes.setTxtStockMax(String.valueOf(ingrediente.getStockmax()));
		registrarIngredientes.setTxtStockMin(String.valueOf(ingrediente.getStockmin()));
		registrarIngredientes.setUnidadMedicion(new String[] {ingrediente.getUnidaddeMedida()});
		}
		else registrarIngredientes.mostrarMensaje("No encontrado");
	}
	public void incluir(){
		try {
			IngredienteDAO ingredienteDAO = new IngredienteDAO();
			Ingrediente ingrediente = ingredienteDAO.buscarIngredientePorNombre(registrarIngredientes.getTxtNombre());
		if(ingrediente==null){
			String n = registrarIngredientes.getTxtNombre();
			float cant = new Float(registrarIngredientes.getCantEntrante());
			String unidMed = registrarIngredientes.getUnidadMedicion();
			float smin= new Float(registrarIngredientes.getTxtStockMin());
			float smax = new Float(registrarIngredientes.getStockMax());
				if ((cant<=new Float(registrarIngredientes.getStockMax()))&(cant>= new Float (registrarIngredientes.getTxtStockMin()))){
					ingrediente = new Ingrediente(n, cant, unidMed, smin, smax);
					ingredienteDAO.registrarIngrediente(ingrediente);
					registrarIngredientes.mostrarMensaje("Incluido");	
					limpiarCampos();	
				}
				else registrarIngredientes.mostrarMensaje("Chequee cantidad con respecto a cada Stock");
		}
		else registrarIngredientes.mostrarMensaje("Repetido");
		}
		catch(Exception e) {
			registrarIngredientes.mostrarMensaje("Chequee los campos");
		}
	}
	public void modificar(){
		try{
			IngredienteDAO ingredienteDAO = new IngredienteDAO();
			int cod = Integer.parseInt(registrarIngredientes.getNroCodigo());
			Ingrediente ingrediente = ingredienteDAO.buscarIngredientePorCodigo(cod);
		if (ingrediente!=null){
			if (((new Float(registrarIngredientes.getCantEntrante())+(ingrediente.getExistencia())))<=ingrediente.getStockmax()){
			ingrediente.setNombre(registrarIngredientes.getTxtNombre());
			float cant = new Float(registrarIngredientes.getCantEntrante());
			ingrediente.setUnidaddeMedida(registrarIngredientes.getUnidadMedicion());
			float smin = new Float(registrarIngredientes.getTxtStockMin());
			ingrediente.setStockmin(smin);
			float smax = new Float(registrarIngredientes.getStockMax());
			ingrediente.setStockmax(smax);
			float nuevaExist= (ingrediente.getExistencia()+cant);
			ingrediente.setExistencia(nuevaExist);
			ingredienteDAO.actualizarIngrediente(ingrediente);
			registrarIngredientes.mostrarMensaje("actualizado");
			limpiarCampos();
			}
			else registrarIngredientes.mostrarMensaje("Stock Maximo= '"+ingrediente.getStockmax()+"'");
		}
		else registrarIngredientes.mostrarMensaje("chequee campos");
		}
		catch (Exception e){
			registrarIngredientes.mostrarMensaje("Campos Vacios");
		}
	}
	public void eliminar(){
		try{
			IngredienteDAO ingredienteDAO = new IngredienteDAO();
			Ingrediente ingrediente = ingredienteDAO.buscarIngredientePorCodigo(Integer.parseInt(registrarIngredientes.getNroCodigo()));
			if(ingrediente!=null){
				ingredienteDAO.eliminarIngrediente(ingrediente);
				registrarIngredientes.mostrarMensaje("eliminado");
				limpiarCampos();
			}
			else registrarIngredientes.mostrarMensaje("No encontrado");
		}
		catch(Exception e){
			rellenarCapos();
			registrarIngredientes.mostrarMensaje("Verifique");
		}
	}
	public void limpiarCampos(){
		registrarIngredientes.setTitle("OPERACIONES SOBRE INGREDIENTES");
		registrarIngredientes.setTxtNombre("");
		registrarIngredientes.setTxtExistencia("");
		registrarIngredientes.setTxtStockMax("");
		registrarIngredientes.setTxtStockMin("");
		registrarIngredientes.setCantEntrante("");
		registrarIngredientes.setUnidadMedicion(Ingrediente.UNIDAD_MEDICION);
		registrarIngredientes.setNroCodigo("");
	}
}